Real MySQL 설치와 설정 (2) MySQL 서버의 데이터 파일을 그대로 두고 업그레이드 하는 방법. 2. MySQL 8.0 업그레이드 시 고려 사항 MySQL 8.0에서는 개선,변경,삭제된 기능이 있다. MySQL 8.0 부터는 Caching SHA-2 Authentication (이하 SHA-2) 인증 방식을 Default 로 사용한다. MySQl 8.0과의 호환성 체크 MySQL 8.0에서는 외래키 이름 길이를 64자로... mysqlReal MySQLReal MySQL 15. B-Tree 인덱스(2) 인덱스를 통해 레코드를 한 건만 읽는 경우와 한 건 이상을 읽는 경우를 각각 다른 이름으로 구분하지만, 여기서는 모두 묶어 "인덱스 레인지 스캔"이라고 표현했다. 하지만 B-Tree 인덱스의 리프 노드를 스캔하면서 실제 데이터 파일의 레코드를 읽어 와야 하는 경우도 많은데, 이 과정을 좀 더 자세히 살펴보자. B-Tree 인덱스에서 루트와 브랜치 노드를 이용해 특정 검색(스캔) 시작 값을 가... Real MySQLReal MySQL 14. B-Tree 인덱스(1) 2. B-Tree 인덱스 키 추가 및 삭제 일반적으로 테이블에 인덱스가 3개(테이블의 모든 인덱스가 B-Tree라는 가정하에)가 있다면 이때 테이블에 인덱스가 하나도 없는 경우는 작업 비용이 1이고, 3개인 경우에는 5.5 정도의 비용(1.5 * 3 + 1) 정도로 예측해 볼 수 있다. InnoDB 스토리지 엔진의 인서트 버퍼는 MySQL 5.1 이하에서는 INSERT로 인한 인덱스 키 추가... Real MySQLReal MySQL 16. B-Tree 인덱스(3) 일반적인 상용 DBMS에서는 인덱스를 생성하는 시점에 인덱스를 구성하는 각 칼럼의 정렬을 오름차순으로 또는 내림차순을 설정할 수 있다. 그러면 다음과 같이 ORDER BY의 정렬 조건을 모두 오름차순(ASC)으로 사용할 수 있게 되므로 별도의 정렬 작업 없이 인덱스를 읽기만 해도 정렬되어 출력되는 것이다. 즉, 인덱스를 역순으로 정렬되게 할 수는 없지만 인덱스를 읽는 방향에 따라 오름차순 또... Real MySQLReal MySQL 36. SQL 힌트(1) 먼저 departments 테이블을 드라이빙 테이블로 선택했고, 두 번째로 dept_emp 테이블을 읽고, 마지막으로 employees 테이블을 읽었음을 알 수 있다. 이 쿼리의 실행 계획을 보면 FROM 절에 명시된 employees -> dept_emp -> departments 테이블 순서로 조인이 수행됐다는 것을 확인할 수 있다. 즉, 다음 예제와 같이 SQL 표준 문법으로 조인을 수... Real MySQLReal MySQL 7. MySQL 트랜잭션 MySQL의 동시성에는 잠금(Lock), 트랜잭션, 그리고 트랜잭션의 격리 수준(Isolation level)이 영향을 미친다. 격리 수준이라는 것은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미한다. 트랜잭션은 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100... Real MySQLReal MySQL [TIL 2021.09.24] Real MySQL: 실행 계획 분석 Today I Learned from에 여러 테이블 가져올떄 그냥 두개의 테이블을 불러오는 쿼리. from_date와salary가 emp_no이 10001인 값으로 모두 표현되고 있음. 이렇게 하니까 emp_no 10002의 from_date가 오름차순에서 가장 빠른 날짜의 키의 from_date와 salary의 값을 가져온다. 참고로 salaries 의 emp_no과 from_date가 합... Real MySQLReal MySQL 22. MySQL 실행 계획 : 개요 DBMS에서는 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하며, 그러한 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업이 필요하다. 이 방식에서는 통계 정보(테이블의 레코드 건수나 칼럼 값의 분포도)를 조사하지 않고 실행 계획이 수립되기 때문에 같은 쿼리에 대해서는 거의 항상 같은 실행 방법을 만들어 낸다. 비용 기반 최적화는 쿼리를... Real MySQLReal MySQL 5. MyISAM 스토리지 엔진 아키텍처 MyISAM 스토리지 엔진의 성능에 영향을 미치는 요소인 키 캐시와 운영체제의 캐시/버퍼에 대해 살펴보자. 1. 키 캐시 하지만 32비트 운영체제와 64비트 운영체제 모두 하나의 키 캐시에 4GB 이상의 메모리 공간을 설정할 수 없다. 만약 4GB 이상의 키 캐시를 할당하고 싶다면 기본(Default) 키 캐시 이외에 별도의 명명된(이름이 붙은) 키 캐시 공간을 설정해야 한다. 기본(Defa... Real MySQLReal MySQL 42. 파티션 : MySQL 파티션의 종류(2) 해시 파티션은 특정 파티션 키 값을 테이블의 파티션 개수로 MOD 연산한 결과 값에 의해 각 레코드가 저장될 파티션을 결정한다. 해시 파티션이나 키 파티션에서 특정 파티션을 두 개 이상의 파티션으로 분할하는 기능은 없으며, 테이블 전체적으로 파티션의 개수를 늘리는 것만 가능하다. 리니어 해시 파티션/리니어 키 파티션은 각 레코드 분배를 위해 "Power-of-two(2의 승수)" 알고리즘을 ... Real MySQLReal MySQL 25. MySQL 실행 계획 : 실행 계획 분석(3) 그런데 possible_keys 칼럼에 있는 내용은 MySQL 옵티마이저가 최적의 실행 계획을 만들기 위해 후보로 접근했던 접근 방식에서 사용되는 인덱스의 목록일 뿐이다. Possible_keys 칼럼의 인덱스가 사용 후보였던 반면 Key 칼럼에 표시되는 인덱스는 최종 선택된 실행 계획에서 사용하는 인덱스를 의미한다. 실행 계획의 key_len 칼럼의 값은, 쿼리를 처리하기 위해 다중 칼럼으... Real MySQLReal MySQL
설치와 설정 (2) MySQL 서버의 데이터 파일을 그대로 두고 업그레이드 하는 방법. 2. MySQL 8.0 업그레이드 시 고려 사항 MySQL 8.0에서는 개선,변경,삭제된 기능이 있다. MySQL 8.0 부터는 Caching SHA-2 Authentication (이하 SHA-2) 인증 방식을 Default 로 사용한다. MySQl 8.0과의 호환성 체크 MySQL 8.0에서는 외래키 이름 길이를 64자로... mysqlReal MySQLReal MySQL 15. B-Tree 인덱스(2) 인덱스를 통해 레코드를 한 건만 읽는 경우와 한 건 이상을 읽는 경우를 각각 다른 이름으로 구분하지만, 여기서는 모두 묶어 "인덱스 레인지 스캔"이라고 표현했다. 하지만 B-Tree 인덱스의 리프 노드를 스캔하면서 실제 데이터 파일의 레코드를 읽어 와야 하는 경우도 많은데, 이 과정을 좀 더 자세히 살펴보자. B-Tree 인덱스에서 루트와 브랜치 노드를 이용해 특정 검색(스캔) 시작 값을 가... Real MySQLReal MySQL 14. B-Tree 인덱스(1) 2. B-Tree 인덱스 키 추가 및 삭제 일반적으로 테이블에 인덱스가 3개(테이블의 모든 인덱스가 B-Tree라는 가정하에)가 있다면 이때 테이블에 인덱스가 하나도 없는 경우는 작업 비용이 1이고, 3개인 경우에는 5.5 정도의 비용(1.5 * 3 + 1) 정도로 예측해 볼 수 있다. InnoDB 스토리지 엔진의 인서트 버퍼는 MySQL 5.1 이하에서는 INSERT로 인한 인덱스 키 추가... Real MySQLReal MySQL 16. B-Tree 인덱스(3) 일반적인 상용 DBMS에서는 인덱스를 생성하는 시점에 인덱스를 구성하는 각 칼럼의 정렬을 오름차순으로 또는 내림차순을 설정할 수 있다. 그러면 다음과 같이 ORDER BY의 정렬 조건을 모두 오름차순(ASC)으로 사용할 수 있게 되므로 별도의 정렬 작업 없이 인덱스를 읽기만 해도 정렬되어 출력되는 것이다. 즉, 인덱스를 역순으로 정렬되게 할 수는 없지만 인덱스를 읽는 방향에 따라 오름차순 또... Real MySQLReal MySQL 36. SQL 힌트(1) 먼저 departments 테이블을 드라이빙 테이블로 선택했고, 두 번째로 dept_emp 테이블을 읽고, 마지막으로 employees 테이블을 읽었음을 알 수 있다. 이 쿼리의 실행 계획을 보면 FROM 절에 명시된 employees -> dept_emp -> departments 테이블 순서로 조인이 수행됐다는 것을 확인할 수 있다. 즉, 다음 예제와 같이 SQL 표준 문법으로 조인을 수... Real MySQLReal MySQL 7. MySQL 트랜잭션 MySQL의 동시성에는 잠금(Lock), 트랜잭션, 그리고 트랜잭션의 격리 수준(Isolation level)이 영향을 미친다. 격리 수준이라는 것은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미한다. 트랜잭션은 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100... Real MySQLReal MySQL [TIL 2021.09.24] Real MySQL: 실행 계획 분석 Today I Learned from에 여러 테이블 가져올떄 그냥 두개의 테이블을 불러오는 쿼리. from_date와salary가 emp_no이 10001인 값으로 모두 표현되고 있음. 이렇게 하니까 emp_no 10002의 from_date가 오름차순에서 가장 빠른 날짜의 키의 from_date와 salary의 값을 가져온다. 참고로 salaries 의 emp_no과 from_date가 합... Real MySQLReal MySQL 22. MySQL 실행 계획 : 개요 DBMS에서는 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하며, 그러한 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업이 필요하다. 이 방식에서는 통계 정보(테이블의 레코드 건수나 칼럼 값의 분포도)를 조사하지 않고 실행 계획이 수립되기 때문에 같은 쿼리에 대해서는 거의 항상 같은 실행 방법을 만들어 낸다. 비용 기반 최적화는 쿼리를... Real MySQLReal MySQL 5. MyISAM 스토리지 엔진 아키텍처 MyISAM 스토리지 엔진의 성능에 영향을 미치는 요소인 키 캐시와 운영체제의 캐시/버퍼에 대해 살펴보자. 1. 키 캐시 하지만 32비트 운영체제와 64비트 운영체제 모두 하나의 키 캐시에 4GB 이상의 메모리 공간을 설정할 수 없다. 만약 4GB 이상의 키 캐시를 할당하고 싶다면 기본(Default) 키 캐시 이외에 별도의 명명된(이름이 붙은) 키 캐시 공간을 설정해야 한다. 기본(Defa... Real MySQLReal MySQL 42. 파티션 : MySQL 파티션의 종류(2) 해시 파티션은 특정 파티션 키 값을 테이블의 파티션 개수로 MOD 연산한 결과 값에 의해 각 레코드가 저장될 파티션을 결정한다. 해시 파티션이나 키 파티션에서 특정 파티션을 두 개 이상의 파티션으로 분할하는 기능은 없으며, 테이블 전체적으로 파티션의 개수를 늘리는 것만 가능하다. 리니어 해시 파티션/리니어 키 파티션은 각 레코드 분배를 위해 "Power-of-two(2의 승수)" 알고리즘을 ... Real MySQLReal MySQL 25. MySQL 실행 계획 : 실행 계획 분석(3) 그런데 possible_keys 칼럼에 있는 내용은 MySQL 옵티마이저가 최적의 실행 계획을 만들기 위해 후보로 접근했던 접근 방식에서 사용되는 인덱스의 목록일 뿐이다. Possible_keys 칼럼의 인덱스가 사용 후보였던 반면 Key 칼럼에 표시되는 인덱스는 최종 선택된 실행 계획에서 사용하는 인덱스를 의미한다. 실행 계획의 key_len 칼럼의 값은, 쿼리를 처리하기 위해 다중 칼럼으... Real MySQLReal MySQL